﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using GestionaleLib;
using GestionaleLib.Controller;

namespace Leaf.View.Aliquota
{
    public partial class frmAliquota : Form
    {
        #region "Testata Anagrafica"
        private frmMain RifMain;
        private FormStatus.StatoForm StatoForm;
        private GestionaleLib.Aliquota AliquotaSelezionata;
        
        public frmAliquota(frmMain RifMain,GestionaleLib.Aliquota Aliquota=null
            , FormStatus.StatoForm StatoForm = FormStatus.StatoForm.Nuovo)
        {
            InitializeComponent();
            this.RifMain = RifMain;
            this.StatoForm = StatoForm;
            this.AliquotaSelezionata = Aliquota;
            ImpostaStato();
            Elenco();
        }
        #endregion

        private void ImpostaStato()
        {
            switch (StatoForm)
            {
                case FormStatus.StatoForm.Nuovo:
                    this.Text = "Nuova Aliquota";
                    break;
                case FormStatus.StatoForm.Modifica:
                    this.Text="Modifica Aliquota";
                    LeggiCampiModifica();
                    break;
            }
        }
        private void LeggiCampiModifica()
        {
            if(AliquotaSelezionata!=null)
            {
                txtDescrizione.Text = AliquotaSelezionata.Descrizione;
                txtAliquota.Text = Convert.ToString(AliquotaSelezionata.Valore);
            }
        }
        public void Aggiorna()
        {
            Elenco();
        }
        private void Elenco()
        {
            Grid.DataSource = null;
            Grid.DataSource = new ctrlAliquote().Seleziona();
            FormattaGriglia();
        }
        private void Ricerca()
        {
            Grid.DataSource = null;
            Grid.DataSource = new ctrlAliquote().Seleziona(txtCerca.Text);
            FormattaGriglia();
        }
        private void FormattaGriglia()
        {
            if(Grid.Rows.Count>0)
                Grid.Columns["Id"].Visible = false;
        }
        private void PulisciCaselle()
        {
            foreach (Control item in pnlMain.Controls)
            {
                if (item is TextBox)
                    item.Text = "";
            }
            this.StatoForm = FormStatus.StatoForm.Nuovo;
            ImpostaStato();
        }
        private void cmdAnnulla_Click(object sender, EventArgs e)
        {
            PulisciCaselle();
            txtDescrizione.Focus();
        }
        private void cmdCerca_Click(object sender, EventArgs e)
        {
            Ricerca();
        }
        private void Salva()
        {
            if (txtDescrizione.Text.Equals("") ||
                txtAliquota.Text.Equals(""))
            {
                MessageBox.Show("I campi non sono stati inseriti", "", MessageBoxButtons.OK
                    , MessageBoxIcon.Warning);
                return;
            }
            try
            {
                if (StatoForm == FormStatus.StatoForm.Nuovo)
                {
                    GestionaleLib.Aliquota Aliquota = new GestionaleLib.Aliquota(); //crea nuovo guid
                    Aliquota.Descrizione = txtDescrizione.Text;
                    Aliquota.Valore = Convert.ToDouble(txtAliquota.Text);
                    new ctrlAliquote().Nuovo(Aliquota);
                }
                else if (StatoForm == FormStatus.StatoForm.Modifica)
                {
                    AliquotaSelezionata.Descrizione = txtDescrizione.Text;
                    AliquotaSelezionata.Valore = Convert.ToDouble(txtAliquota.Text);
                    new ctrlAliquote().Modifica(AliquotaSelezionata);
                }
                Aggiorna();
                cmdAnnulla_Click(null, null);
            }
            catch (FormatException)
            {
                MessageBox.Show("I valori inseriti non corrispondono a quelli richiesti");
            }
            catch (ExceptionErroreInserimento)
            {
                MessageBox.Show("Errore durante la procedura");
            }
            catch (ExceptionErroreModifica)
            {
                MessageBox.Show("Errore durante la procedura");
            }
        }
        private void cmdSalva_Click(object sender, EventArgs e)
        {
            Salva();
        }
        private void cmdModifica_Click(object sender, EventArgs e)
        {
            if (Grid.DataSource != null &&
                Grid.Rows.Count > 0)
            {
                Grid_CellClick(null, null);
                StatoForm = FormStatus.StatoForm.Modifica;
                ImpostaStato();
            }
        }
        private void cmdCancella_Click(object sender, EventArgs e)
        {
            if (Grid.DataSource != null &&
                Grid.Rows.Count > 0)
            {
                DialogResult scelta = MessageBox.Show("Vuoi cancellare l'elemento selezionato?"
                    , "", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
                if (scelta == System.Windows.Forms.DialogResult.Yes)
                {
                    try
                    {
                        new ctrlAliquote().Cancella(AliquotaSelezionata);
                        Aggiorna();
                        cmdAnnulla_Click(null, null);
                    }
                    catch (ExceptionErroreCancellazione)
                    {
                        MessageBox.Show("Errore durante la procedura");
                    }
                }
            }
        }
        private void Grid_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            if (Grid.DataSource != null &&
                Grid.Rows.Count > 0)
                AliquotaSelezionata = (GestionaleLib.Aliquota)Grid.SelectedRows[0].DataBoundItem;
        }
    }
}
